import re
import time
from loguru import logger
from tools.global_data import GlobalData
from tools import handle_data
import allure

@allure.step("===替换占位符===")
def replace_mark_data_by_re(replace_data):
    """
    将标志符通过正则表达式提取出来，再替换为：全局变量或函数调用
    :param req_data:请求数据
    :return:替换后的数据
    """

    result_re = re.findall("#(\w+?)#", replace_data)
    # result_re为空列表
    if not result_re:
        return replace_data
    # 不为空，列表
    result_re = list(set(result_re))
    for key in result_re:
        # 全局变量中有key，则将请求数据中的占位符替换为全局变量的值
        if hasattr(GlobalData, key):
            logger.info(f"在全局变量当中，key为：{key} 值为：{getattr(GlobalData, key)}")
            replace_data = replace_data.replace(f"#{key}#", getattr(GlobalData, key))
        # 没有，则将请求数据中的占位符替换为函数值
        else:
            # handle_data处理全局变量中没有的值，调用函数
            logger.info("不在全局当中,去python脚本中寻找....")
            if key in handle_data.__all__:
                logger.info(f"找到了...执行函数后得到的值为:{getattr(handle_data, key)()}")
                replace_data = replace_data.replace(f"#{key}#", getattr(handle_data, key)())
            else:
                logger.warning("都没有找到数据")
    return replace_data




